package internetz; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import logger.PjiitOutputter; import org.apache.commons.lang3.SystemUtils; import repast.simphony.random.RandomHelper; import au.com.bytecode.opencsv.CSVReader; import cern.jet.random.BreitWigner; import cern.jet.random.Normal; import cern.jet.random.Poisson; import constants.RandomMethod; /*** * Here are all skills known to GitHub read and hold in ArrayList for more info, * please visit: * https://github.com/github/linguist/blob/master/lib/linguist/languages.yml * * @author Oskar Jarczyk * @since 1.0 */ public class SkillFactory { /** * File format: * * language1,type\r\n language2,type\r\n ... langauage{i},type * * circa 200 entries */ private static String filename = SystemUtils.IS_OS_LINUX ? "data/all-languages.csv" : "data\\all-languages.csv"; public static ArrayList<Skill> skills = new ArrayList<Skill>(); public SkillFactory() { say("SkillFactory object created"); } public Skill getSkill(String name) { for (Skill skill : skills) { if (skill.getName().toLowerCase().equals(name.toLowerCase())) { return skill; } } return null; } public Skill getRandomSkill() { if (SimulationParameters.skillFactoryRandomMethod .equals("normal_distribution")) { return getRandomSkill(RandomMethod.NORMAL_DISTRIBUTION); } else if (SimulationParameters.skillFactoryRandomMethod .equals("breit_wigner")) { return getRandomSkill(RandomMethod.BREIT_WIGNER); } else if (SimulationParameters.skillFactoryRandomMethod .equals("normal_distribution")) { return getRandomSkill(RandomMethod.POISSON_DISTRIBUTION); } return getRandomSkill(RandomMethod.RANDOM_GENERATOR); } public Skill getRandomSkill(RandomMethod method) { double randomized; switch (method) { case POISSON_DISTRIBUTION: Poisson poisson = new Poisson(0.0, cern.jet.random.Poisson.makeDefaultGenerator()); randomized = poisson.nextDouble(); assert (randomized >= 0.) && (randomized <= 1.); return skills.get((int) (randomized * skills.size())); case RANDOM_GENERATOR: int i = RandomHelper.nextIntFromTo(0,skills.size()-1); return skills.get(i); case NORMAL_DISTRIBUTION: Normal normal = new Normal(0.0, 1.0, cern.jet.random.Normal.makeDefaultGenerator()); randomized = normal.nextDouble(); assert (randomized >= 0.) && (randomized <= 1.); return skills.get((int) (randomized * skills.size())); case BREIT_WIGNER: BreitWigner bw = new BreitWigner(1.0, 1.0, 1.0, cern.jet.random.BreitWigner.makeDefaultGenerator()); randomized = bw.nextDouble(); assert (randomized >= 0.) && (randomized <= 1.); return skills.get((int) (randomized * skills.size())); default: break; } return null; } public void buildSkillsLibrary() throws IOException, FileNotFoundException { say("Searching for file in: " + new File(".").getAbsolutePath()); CSVReader reader = new CSVReader(new FileReader(filename)); String[] nextLine; while ((nextLine = reader.readNext()) != null) { Skill skill = new Skill(nextLine[0], nextLine[1], skills.size() + 1); skills.add(skill); say("Skill " + skill.getId() + ": " + skill.getName() + " added to factory"); } reader.close(); } private static void say(String s) { PjiitOutputter.say(s); } }